package com.tdam2014.grupo11;

import java.util.ArrayList;

import org.utnrepasa.net.principal.ControladorCliente;
import org.utnrepasa.net.util.Course;
import org.utnrepasa.net.util.User;


import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MultijugadorInvitar extends Activity {

	private EditText txtBuscar;
	private Button btnBuscar;
	private Button btnInvitar;

	private ListView lstUsuarios;

	private AdapterListaUsuarios adapterListaUsuarios;

	private ControladorCliente controladorCliente;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_multijugador_invitar);

		txtBuscar = (EditText) findViewById(R.id.txtBuscar);
		btnBuscar = (Button) findViewById(R.id.btnBuscar);
		btnInvitar = (Button) findViewById(R.id.btnInvitar);

		lstUsuarios = (ListView) findViewById(R.id.lstUsuarios);

		controladorCliente = ControladorCliente.getInstancia(this);
		controladorCliente.solicitarUsuarios();

		adapterListaUsuarios = new AdapterListaUsuarios(this);
		lstUsuarios.setAdapter(adapterListaUsuarios);

		btnBuscar.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				String patron = txtBuscar.getText().toString();
				controladorCliente.solicitarUsuarios(patron);
			}

		});

		btnInvitar.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				controladorCliente.crearPartida(adapterListaUsuarios
						.getSeleccionados());
			}
		});

	}

	public void recibirUsuarios(final ArrayList<User> usuarios) {
		try {
			runOnUiThread(new Runnable() {

				@Override
				public void run() {
					adapterListaUsuarios.setLista(usuarios);
					adapterListaUsuarios.notifyDataSetChanged();
				}
			});
		} catch (Exception e) {
			Log.e(MultijugadorInvitar.class.getName(), e.getMessage());
			Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
		}
	}

	public void recibirCreacionPartida(boolean creacionCorrecta) {
		try {
			final String mensaje;
			if (creacionCorrecta) {
				mensaje = "Partida creada corretamente";
				startActivity(new Intent(MultijugadorInvitar.this, MultijugadorPartidas.class));
			} else {
				mensaje = "Error al trata de crear la partida";
			}
			runOnUiThread(new Runnable() {

				@Override
				public void run() {
					Toast.makeText(MultijugadorInvitar.this, mensaje, Toast.LENGTH_LONG).show();
				}
			});
		} catch (Exception e) {
			Log.e(MultijugadorInvitar.class.getName(), e.getMessage());
			Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
		}
	}

	class AdapterListaUsuarios extends BaseAdapter {

		private LayoutInflater inflater;
		private ArrayList<User> lista;
		private ArrayList<User> seleccionados;

		public AdapterListaUsuarios(Context contexto) {
			this.lista = new ArrayList<User>();
			this.seleccionados = new ArrayList<User>();
			inflater = LayoutInflater.from(contexto);
		}

		public void setLista(ArrayList<User> lista) {
			this.lista = lista;
		}

		public ArrayList<User> getSeleccionados() {
			return this.seleccionados;
		}

		@Override
		public int getCount() {
			return lista.size();
		}

		@Override
		public Object getItem(int index) {
			return lista.get(index);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			Holder holder = null;
			User usuario = lista.get(position);
			if (convertView == null) {
				convertView = inflater.inflate(R.layout.item_txtview_checkbox,
						null);
				holder = new Holder();
				holder.txt = (TextView) convertView.findViewById(R.id.txtCampo);
				holder.chk = (CheckBox) convertView
						.findViewById(R.id.chkOpcion);
				convertView.setTag(holder);
				holder.esc = new EscuchadorCheckBox(usuario);
				holder.chk.setOnClickListener(holder.esc);
			} else {
				holder = (Holder) convertView.getTag();
			}
			holder.txt.setText(usuario.toString());
			holder.chk.setChecked(seleccionados.contains(usuario));
			holder.esc.usuario = usuario;
			return convertView;
		}

		class Holder {
			protected TextView txt;
			protected CheckBox chk;
			protected EscuchadorCheckBox esc;
		}
		
		class EscuchadorCheckBox implements OnClickListener{

			protected User usuario;
			protected EscuchadorCheckBox(User usuario){
				this.usuario = usuario;
			}
			@Override
			public void onClick(View v) {
				if (((CheckBox) v).isChecked()) {
					seleccionados.add((User)usuario.clone());
				} else {
					seleccionados.remove(usuario);
				}
			}
			
		}
	}
}
